package com.wzq.design.business.system.menu.dto;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.wzq.design.business.system.menu.entity.SysMenu;
import com.wzq.ssm.parent.base.dto.BaseTreeDto;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

/**
 * 路由数据实体类
 * @author wangzhiqiang
 * @since   2024/2/25 16:55
 */
@Data
public class RouteDto extends BaseTreeDto<RouteDto> {

    private String id;

    private String parentId;
    /**
     * 路由路径
     */
    private String path;

    /**
     * 组件路径
     */
    private String component;

    /**
     * 跳转链接
     */
    private String redirect;

    /**
     * 跳转链接
     */
    private String name;

    /**
     * 路由属性
     */
    private Meta meta;

    @Data
    public static class Meta {

        /**
         * 路由title
         */
        private String title;

        /**
         * 图标
         */
        private String icon;

        /**
         * 是否隐藏(true-是 false-否)
         */
        private Boolean hidden;


        /**
         * 【菜单】是否开启页面缓存
         */
        private Boolean keepAlive=false;

        /**
         * 【目录】只有一个子路由是否始终显示
         */
        private Boolean alwaysShow;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public String getParentId() {
        return parentId;
    }

    public static RouteDto fromDbo(SysMenu menu) {
        if (menu == null) {
            return null;
        }
        RouteDto routeDto = new RouteDto();
        routeDto.setId(menu.getId());
        routeDto.setParentId(menu.getParentId());
        routeDto.setPath(menu.getPath());
        routeDto.setComponent(menu.getComponent());
        routeDto.setRedirect(menu.getRedirect());
        routeDto.setName(StringUtils.capitalize(StrUtil.toCamelCase(menu.getPath(), '-')));
        routeDto.setId(menu.getId());
        routeDto.setParentId(menu.getParentId());

        Meta meta=new Meta();
        meta.setIcon(menu.getIcon());
        meta.setHidden(menu.getVisible()==null||menu.getVisible()!=1);
        meta.setTitle(menu.getName());
        // 【菜单】是否开启页面缓存
        if (SysMenu.MenuTypeEnum.MENU.equals(menu.getType())
                && ObjectUtil.equals(menu.getKeepAlive(), 1)) {
            meta.setKeepAlive(true);
        }
        // 【目录】只有一个子路由是否始终显示
        if (SysMenu.MenuTypeEnum.CATALOG.equals(menu.getType())
                && ObjectUtil.equals(menu.getAlwaysShow(), 1)) {
            meta.setAlwaysShow(true);
        }

        routeDto.setMeta(meta);

        return routeDto;
    }
}
